From def94f03e240babfd589c8ba8e7cc4961a3d6aab Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 20 Dec 2016 19:20:02 +0100 Subject: [PATCH] debug: Add GTK_DEBUG=snapshot This causes the snapshotting algorithm to dump all widget nodes into their own container node. We then name that group accordingly (ie "GtkSwitch<0xdeadbeef>") so you can easily see which node belongs where. The feature is toggleable in the inspector's visual tab. There's a few problems with it, becuse GtkSnapshot optimized container nodes away if they are not needed, so we are losing some widgets... --- docs/reference/gtk/running.sgml | 4 ++++ gtk/gtkdebug.h | 3 ++- gtk/gtkmain.c | 3 ++- gtk/gtkwidget.c | 6 ++++++ gtk/inspector/visual.c | 16 +++++++++++++++ gtk/inspector/visual.ui | 35 +++++++++++++++++++++++++++++++++ 6 files changed, 65 insertions(+), 2 deletions(-) diff --git a/docs/reference/gtk/running.sgml b/docs/reference/gtk/running.sgml index 3bc8f35714..e8708ceee1 100644 --- a/docs/reference/gtk/running.sgml +++ b/docs/reference/gtk/running.sgml @@ -210,6 +210,10 @@ additional environment variables. layout Show layout borders + + snapshot + Include debug render nodes in the generated snapshots + The special value all can be used to turn on all debug options. The special value help can be used diff --git a/gtk/gtkdebug.h b/gtk/gtkdebug.h index 3f624a9110..e550a32715 100644 --- a/gtk/gtkdebug.h +++ b/gtk/gtkdebug.h @@ -53,7 +53,8 @@ typedef enum { GTK_DEBUG_TOUCHSCREEN = 1 << 15, GTK_DEBUG_ACTIONS = 1 << 16, GTK_DEBUG_RESIZE = 1 << 17, - GTK_DEBUG_LAYOUT = 1 << 18 + GTK_DEBUG_LAYOUT = 1 << 18, + GTK_DEBUG_SNAPSHOT = 1 << 19 } GtkDebugFlag; #ifdef G_ENABLE_DEBUG diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 21d1870894..ba7b3c6303 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -171,7 +171,8 @@ static const GDebugKey gtk_debug_keys[] = { { "touchscreen", GTK_DEBUG_TOUCHSCREEN }, { "actions", GTK_DEBUG_ACTIONS }, { "resize", GTK_DEBUG_RESIZE }, - { "layout", GTK_DEBUG_LAYOUT } + { "layout", GTK_DEBUG_LAYOUT }, + { "snapshot", GTK_DEBUG_SNAPSHOT } }; #endif /* G_ENABLE_DEBUG */ diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8c54364362..04dfc04d5e 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -15560,6 +15560,9 @@ gtk_widget_snapshot (GtkWidget *widget, */ mode = get_render_mode (klass); + if (GTK_DEBUG_CHECK (SNAPSHOT)) + gtk_snapshot_push (snapshot, TRUE, "%s<%p>", gtk_widget_get_name (widget), widget); + if (mode == RENDER_DRAW) { cairo_t *cr; @@ -15595,6 +15598,9 @@ gtk_widget_snapshot (GtkWidget *widget, if (opacity < 1.0) gtk_snapshot_pop_and_append (snapshot); } + + if (GTK_DEBUG_CHECK (SNAPSHOT)) + gtk_snapshot_pop_and_append (snapshot); } void diff --git a/gtk/inspector/visual.c b/gtk/inspector/visual.c index 400a75104b..dadead345d 100644 --- a/gtk/inspector/visual.c +++ b/gtk/inspector/visual.c @@ -269,6 +269,21 @@ layout_activate (GtkSwitch *sw) redraw_everything (); } +static void +snapshot_activate (GtkSwitch *sw) +{ + guint flags; + + flags = gtk_get_debug_flags (); + + if (gtk_switch_get_active (sw)) + flags |= GTK_DEBUG_SNAPSHOT; + else + flags &= ~GTK_DEBUG_SNAPSHOT; + + gtk_set_debug_flags (flags); +} + static void widget_resize_activate (GtkSwitch *sw) { @@ -919,6 +934,7 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass) gtk_widget_class_bind_template_callback (widget_class, rendering_mode_changed); gtk_widget_class_bind_template_callback (widget_class, baselines_activate); gtk_widget_class_bind_template_callback (widget_class, layout_activate); + gtk_widget_class_bind_template_callback (widget_class, snapshot_activate); gtk_widget_class_bind_template_callback (widget_class, widget_resize_activate); gtk_widget_class_bind_template_callback (widget_class, software_gl_activate); gtk_widget_class_bind_template_callback (widget_class, software_surface_activate); diff --git a/gtk/inspector/visual.ui b/gtk/inspector/visual.ui index 7e28451811..ea8d0f891b 100644 --- a/gtk/inspector/visual.ui +++ b/gtk/inspector/visual.ui @@ -599,6 +599,40 @@ + + + True + False + + + True + horizontal + 10 + 40 + + + True + Snapshot Debug Nodes + start + baseline + 0.0 + + + + + True + end + baseline + + + + True + + + + + + True @@ -841,6 +875,7 @@ + -- 2.30.2